#include "tpcostruzione.h"
#include "flagdescriptor.h"

TpCostruzione::TpCostruzione() :
    Customizable(false)
{
    m_intflag = TpCostruzione::NONE;
	m_value = -1;
    m_set = false;
}

TpCostruzione::TpCostruzione(const TpCostruzione& costruzione)
{
        setCustom(costruzione.isCustom());
		m_value = costruzione.m_value;
		m_intflag = costruzione.m_intflag;
		m_set = costruzione.m_set;
}

TpCostruzione& TpCostruzione::operator=(const TpCostruzione& costruzione)
{
    setCustom(costruzione.isCustom());
    m_intflag = costruzione.m_intflag;
    m_value = costruzione.m_value;
    m_set = costruzione.m_set;
    return *this;
}

TpCostruzione::TpCostruzione(const int& tpco)
{
    setFlag(tpco);
}

TpCostruzione::TpCostruzione(const double& vn)
{
    setFlagValue(vn);
}

void  TpCostruzione::setFlag(const int& TpCo)
{
    switch (TpCo)
    {
    case TpCostruzione::NONE:
        m_intflag=TpCostruzione::NONE;
        m_set = false; setCustom(false);
		m_value = -1;
        break;
    case TpCostruzione::TIPO_1:
        m_intflag=TpCostruzione::TIPO_1;
        m_set = true; setCustom(false);
		m_value = 10;
        break;
    case TpCostruzione::TIPO_2:
        m_intflag=TpCostruzione::TIPO_2;
        m_set = true; setCustom(false);
		m_value = 50;
        break;
    case TpCostruzione::TIPO_3:
        m_intflag=TpCostruzione::TIPO_3;
        m_set = true; setCustom(false);
		m_value = 100;
        break;
    }
}

bool  TpCostruzione::setFlag(const string& str)
{
    if (str.compare("NONE")==0)
    {
        m_intflag = TpCostruzione::NONE;
		m_value = -1;
        m_set = false; setCustom(false);
    }
    else if (str.compare("TIPO_1")==0)
    {
        m_intflag = TpCostruzione::TIPO_1;
		m_value = 10;
        m_set = true; setCustom(false);
    }
    else if (str.compare("TIPO_2")==0)
    {
        m_intflag = TpCostruzione::TIPO_2;
		m_value = 50;
        m_set = true; setCustom(false);
    }
    else if (str.compare("TIPO_3")==0)
    {
        m_intflag = TpCostruzione::TIPO_3;
		m_value = 100;
        m_set = true; setCustom(false);
    }
    else
    {
        return(false);
    }
    return(true);
}

string	TpCostruzione::getFlagStr(void) const
{
    switch (m_intflag)
    {
    case TpCostruzione::NONE:
        return("---");
    case TpCostruzione::TIPO_1:
        return("TIPO_1");
    case TpCostruzione::TIPO_2:
        return("TIPO_2");
    case TpCostruzione::TIPO_3:
        return("TIPO_3");
    }
    return("NONE");
}

int TpCostruzione::setFlagValue(const double& vn)
{
    setCustom(true);
	m_value = vn;
    m_intflag = NONE;
    m_set = true;
    return 1;
}

string TpCostruzione::getFlagDescription( ExaTextFormat format ) const
{
    return FlagDescriptor::getFlagDescription( *this, format );
}
